#include "../include/types.h"
#include "../include/aff.h"



/* 
 * 'scrollup' scrolle l'ecran (la console mappee en ram) vers le haut
 * de n lignes (de 0 a 25).
 */
void scrollup (unsigned int n) 
{
	unsigned char* video, *tmp;
	
	for(video=(unsigned char*)RAMSCREEN ; video<(unsigned char*)SCREENLIM ; video++){
			tmp = (unsigned char*) (video+n*160);

			if(tmp<(unsigned char*)SCREENLIM)
				*video = *tmp;
			else
				*video = 0;
	}

	kY-=n;
	if(kY<0) 
		kY=0;
}

/*
 * 'print' affiche a l'ecran, a la position courante du curseur, une chaine
 * de caracteres terminee par \0.
 */
void print (char* string)
{
	char* ptr;			/* pointeur sur la chaine de caractere */
	unsigned char* video;
	ptr = string;

	while(*ptr!=0){		/* tant que le caractere est different de 0x0 */
		putcar(*ptr);
		ptr++;
	}
}

void putcar(uchar c)
{
	unsigned char* video;

	if(c==10){	/* CR-NL */
		kX=0;
		kY++;
	}
	else{		/* autres caracteres */ 
		video = (unsigned char*) (RAMSCREEN+2*kX+160*kY);
		*video = c;
		*(video+1) = kattr;

		kX++;
		if(kX>79){
			kX = 0;
			kY++;
		}
	}
	if(kY>24)
		scrollup(kY-24);
}

/*
 * Affiche la valeur des n octets a l'adresse indiquee
 */
void dump(uchar* addr, int n)
{
	char c1, c2;
	char *tab = "0123456789ABCDEF";
	
	while(n--) {
		c1 = tab[(*addr & 0xF0)>>4];
		c2 = tab[*addr & 0x0F];
		addr++;
		putcar(c1);
		putcar(c2);
	}
}

void dump_cpu(void)
{
	print("fonction non-implementee pour le moment\n");
}
